package com.zhouheng.springbootdesignpattern.observerpattern.rxjava;

import rx.Observable;

public class RxjavaTest {


    public static void main(String[] args) {
        testObservable();
    }

    /**
     * 模拟股市
     */
    private static void testObservable() {
        // 1.创建被观察者 股市作为被观察者
        Observable<String> stockMarketObservable = Observable.create(subscriber -> {
            // 1.1 模拟股市开市
            subscriber.onStart();
            // 1.2 模拟上涨
            subscriber.onNext("Stock price rise");
            // 1.3 模拟下跌
            subscriber.onNext("Stock price decline");
            // 1.4 模拟股市关闭
            subscriber.onCompleted();
        });

        // 2.创建观察者 机构
        rx.Observer<String> institutionObserver = new rx.Observer<String>() {
            private String name = "机构";

            /*
            * 没有这个方法不能监测到开盘，可能得通过next去操作，新版rx可能得行
            @Override
            public void onStart() {

            }*/

            @Override
            public void onCompleted() {
                System.out.println("机构赚钱了洗脚去了");
            }

            @Override
            public void onError(Throwable arg0) {
                System.out.println("交易异常");
            }

            @Override
            public void onNext(String arg0) {
                if (arg0.contains("rise")) {
                    System.out.println(name + "获利止盈");
                }
                if (arg0.contains("decline")) {
                    System.out.println(name + "下跌止损");
                }
            }
        };

        // 3.创建观察者 散户
        rx.Observer<String> retailInvestorsObserver = new rx.Observer<String>() {
            private String name = "散户";

            /*
            * 没有这个方法不能监测到开盘，可能得通过next去操作，新版rx可能得行
            @Override
            public void onStart() {

            }*/

            @Override
            public void onCompleted() {
                System.out.println(name + "亏钱吃泡面");
            }

            @Override
            public void onError(Throwable arg0) {
                System.out.println("交易异常");
            }

            @Override
            public void onNext(String arg0) {
                if (arg0.contains("rise")) {
                    System.out.println(name + "追高");
                }
                if (arg0.contains("decline")) {
                    System.out.println(name + "恐慌卖出");
                }
            }
        };

        // 4.最后被观察者订阅观察者
        stockMarketObservable.subscribe(institutionObserver);
        stockMarketObservable.subscribe(retailInvestorsObserver);
    }
}
